home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 09, No. 08 (1988-08)(MicroSPARC)(Side A).zip / Nibble Volume 09, No. 08 (1988-08)(MicroSPARC)(Side A).po / DATE.TIME.S < prev    next >
Text File  |  1996-12-24  |  8KB  |  245 lines

  1. *
  2. * DATE.TIME Source Code
  3. * by Royce Bacon
  4. * Copyright(c) 1988
  5. * MicroSPARC, Inc.
  6. * Concord, MA 01742
  7. *
  8. COUT      EQU $FDED      ;OUTPUT A CHAR 
  9. PTR       EQU $6         ;ADDR SAVE AREA
  10. PTR19     EQU $19        ;ZERO PAGE PTR 
  11. PTR1B     EQU $1B        ;ZERO PAGE PTR
  12. WK8       EQU $8         ;WORK AREA
  13. RTRN      EQU $FF58      ;RTS INSTRUCTION
  14. STCK      EQU $100       ;STACK
  15. BUFIN     EQU $200       ;INPUT BUFFER
  16. SPACE     EQU $A0
  17. DATE      EQU $BF90      ;DATE YYMMDD REVERSE SEQ
  18. TIME      EQU $BF92      ;TIME MIN, HR
  19. CONVERT   EQU $ED24      ;PRINT A/X AS DEC 
  20. PBITS     EQU $BE54      ;PARSE BITS
  21. XLEN      EQU $BE52      ;LEN OF COMMAND
  22. XCNUM     EQU $BE53      ;EXTERNAL CMD FLAG
  23. XTRNADDR  EQU $BE50      ;EXTERNAL CMD ADDR
  24. FBITS     EQU $BE56      ;PARMS FOUND
  25. MLI       EQU $BF00      ;PRODOS MLI
  26. VPATH1    EQU $BE6C      ;--> TO PATH NAME
  27. WAIT      EQU $FCA8      ;MONITOR WAIT ROUTINE
  28. SPKR      EQU $C030      ;THIS CLICKS THE SPEAKER
  29.           MSB ON
  30.           ORG $9800
  31. *
  32. * DETERMINE OFFSET TO CMD TABLE
  33. EXIT      JMP $BE9E      ;RETURN TO BASIC.SYSTEM
  34. START     JSR RTRN       ;GET ADDR WE ARE AT
  35.           TSX            ;GET STACK POINTER AS INDEX
  36.           DEX            ;POINT TO LOW ORDER BYTE
  37.           LDA STCK,X     ;GET LOW ORDER BYTE
  38.           CLC            ;PREPARE FOR ADD
  39.           ADC #CMD-START-2 ;OFFSET FOR COMMNAD TABLE
  40.           STA PTR        ;SAVE IT
  41.           INX            ;POINT TO HIGH ORDER BYTE
  42.           LDA STCK,X     ;AND GET IT
  43.           STA PTR+1      ;AND SAVE IT
  44.           LDY #0         ;INDEX FOR CMDS
  45. * CHECK INPUT AGAINST COMMAND TABLE
  46. CKCMD     LDA BUFIN,Y    ;GET CHAR OF INPUT
  47.           CMP #$8D       ;END OF COMMAND?
  48.           BEQ GOTIT      ;YES
  49.           CMP #SPACE     ;END OF COMMAND?
  50.           BEQ GOTIT      ;YES
  51.           CMP (PTR),Y    ;MATCH COMMAND? 
  52.           BNE TRYNEXT    ;NO
  53.           INY            ;YES - CHECK NEXT CHAR
  54.           BNE CKCMD
  55. * TRY THE NEXT COMMAND IN THE TABLE
  56. TRYNEXT   LDA PTR        ;GET --> TO CMD
  57.           CLC            ;PREPARE FOR ADD
  58.           ADC #6         ;POINT TO NEXT CMD
  59.           STA PTR        ;UPDATE POINTER
  60.           LDA (PTR),Y    ;GET 1ST CHAR OF CMD
  61.           BNE CKCMD      ;CHECK COMMAND IF NOT LAST 
  62.           SEC            ;INDICATE INVALID CMD 
  63.           BEQ EXIT       ;INVALID CMD
  64.           BNE EXIT
  65. GOTIT     LDA #$10       ;INDICATE FILENAME OPT
  66.           STA PBITS
  67.           LDA #0
  68.           STA PBITS+1
  69.           STA XCNUM      ;INDICATE EXTERNAL CMD
  70.           LDY #3         ;LEN OF CMD - 1
  71.           STY XLEN
  72.           INY            ;Y = 4 
  73.           LDA (PTR),Y    ;GET OFFSET OF CMD HANDLER
  74.           STA XTRNADDR
  75.           INY
  76.           LDA (PTR),Y    ;HIGH ORDER BYTE 
  77.           CLC
  78.           ADC PTR+1      ;ADD START OF RTN
  79.           STA XTRNADDR+1
  80.           CLC            ;INDICATE VALID CMD 
  81.           RTS            ;LET BASIC.SYS PARSE CMD
  82. *
  83. * COMMAND TABLE
  84. * BYTES 1-4 = COMMAND NAME
  85. *      5-6 = OFFSET FOR ROUTINE TO HANDLE CMD 
  86. CMD       ASC "DATE"     ;COMMAND
  87.           DW DATERTN-EXIT ;--> DATE CMD
  88.           ASC "TIME"     ;COMMAND
  89.           DW TIMERTN-EXIT ;--> TIME COMMAND
  90.           ASC "BELL"     ;COMMAND
  91.           DW BELL-EXIT   ;--> BELL COMMAND
  92.           DFB 0          ;END OF COMMANDS
  93. *
  94. * DISPLAY DATE ROUTINE
  95. *
  96. DATERTN   JSR MLI        ;CALL PRODOS MLI
  97.           DFB $82        ;TO GET TIME
  98.           DW 0           ;NO PARM LIST FOR GET.TIME
  99.           LDA DATE+1     ;GET 2ND BYTE OF DATE
  100.           LSR A          ;SAVE BIT ZERO IN CARRY
  101.           LDA DATE       ;GET 1ST BYTE OF DATE
  102.           ROR A          ;SHIFT MONTH INTO
  103.           LSR A          ;  LOW ORDER
  104.           LSR A          ;    OF BYTE
  105.           LSR A 
  106.           LSR A 
  107.           TAX            ;MOVE VALUE TO X 
  108.           LDA #0         ;HIGH ORDER BYTE IS ZERO
  109.           JSR CONVERT    ;AND CONVERT IT
  110.           LDA #'/'
  111.           JSR COUT       ;PRINT /
  112.           LDA DATE       ;GET FIRST BYTE OF DATE
  113.           AND #$1F       ;ISOLATE DAY
  114.           TAX            ;INTO X 
  115.           LDA #0
  116.           JSR CONVERT    ;CONVERT TO DEC
  117.           LDA #'/'
  118.           JSR COUT
  119.           LDA DATE+1
  120.           LSR A          ;SHIFT YEAR TO LOW ORDER
  121.           TAX            ;INTO X 
  122.           LDA #0
  123.           JSR CONVERT    ;AND CONVERT IT
  124.           CLC            ;INDICATE NO ERRORS 
  125.           RTS            ;EXIT
  126. *
  127. * CONVERT INPUT FIELD TO HEX
  128. *
  129. CVINP     TSX            ;GET STACK PTR
  130.           DEX            ;-> LOW ORDER BYTE
  131.           CLC
  132.           LDA STCK,X     ;GET LOW ORDER BYTE
  133.           ADC #3         ;ADD FOR EXTRA INST
  134.           STA PTR19
  135.           INX            ;HIGH ORDER BYTE
  136.           LDA STCK,X     ;GET HIGH ORDER BYTE
  137.           ADC #0         ;ADD IN CARRY IF ANY
  138.           STA PTR19+1
  139.           LDA (PTR1B),Y  ;GET CHAR
  140.           AND #$0F       ;MAKE NUMERIC
  141.           STA WK8        ;SAVE IT
  142.           INY            ;NEXT CHAR
  143.           LDA (PTR1B),Y  ;GET NXT CHAR
  144.           CMP #$30       ;CHECK IF NUMERIC
  145.           BCC GOTVAL     ;NO
  146.           CMP #$3A  
  147.           BCS GOTVAL     ;NO
  148.           LDA WK8        ;YES - GET 1ST DIGIT
  149.           ASL A          ;MULTIPLY BY 2
  150.           ASL A          ;4
  151.           ASL A          ;8
  152.           CLC
  153.           ADC WK8        ;ADD TWICE
  154.           ADC WK8        ;TO MULTIPLY BY 10
  155.           STA WK8
  156.           LDA (PTR1B),Y  ;GET 2ND CHAR
  157.           AND #$0F       ;MAKE NUMERIC
  158.           CLC
  159.           ADC WK8        ;ADD 1ST DIGIT
  160.           STA WK8
  161.           INY            ;POINT TO SEPERATOR
  162. GOTVAL    LDA PTR19+1    ;GET RETURN ADDR
  163.           PHA            ;UNTO STACK
  164.           LDA PTR19
  165.           PHA
  166.           LDA WK8        ;RETURN VAL IN ACCUM
  167.           RTS            ;EXIT
  168. *
  169. * TIME ROUTINES
  170. *
  171. TIMERTN   LDA FBITS      ;GET PARMS FOUND FLAG
  172.           BEQ SHOWTM     ;NO PARMS
  173. *
  174. * SET TIME ROUTINE
  175. SETTM     LDA VPATH1     ;MOVE PATH NAME PTR
  176.           STA PTR1B      ;TO ZERO PAGE
  177.           LDA VPATH1+1
  178.           STA PTR1B+1 
  179.           LDY #2         ;--> TO HRS 
  180.           JSR RTRN       ;PUT RETURN ADDR ON STACK
  181.           CLV
  182.           BVC CVINP      ;CONVERT HOURS TO HEX
  183.           STA TIME+1     ;STORE IN HOURS
  184.           INY            ;BYPASS SEPERATOR
  185.           JSR RTRN
  186.           CLV
  187.           BVC CVINP      ;CONVERT MINS TO HEX
  188.           STA TIME       ;STORE IN MINUTES
  189. * FALL THRU TO SHOW TIME 
  190. *
  191. * DISPLAY TIME ROUTINE
  192. *
  193. SHOWTM    JSR MLI        ;CALL PRODOS MLI
  194.           DFB $82        ;TO GET TIME
  195.           DW 0           ;NO PARM LIST FOR GET.TIME
  196.           LDA TIME+1     ;GET HOUR
  197.           BEQ GR9
  198.           CMP #12        ;PM?
  199.           BCC ISAM       ;NO
  200.           SBC #12        ;YES - SUBTRACT 12 
  201.           BNE ISAM
  202. GR9       LDA #12 
  203. ISAM      TAX            ;SAVE HOUR
  204.           LDA #0
  205.           JSR CONVERT    ;AND CONVERT IT
  206.           LDA #':'
  207.           JSR COUT
  208.           LDX TIME       ;GET MINUTES
  209.           CPX #10
  210.           BCS GT9 
  211.           LDA #'0'
  212.           JSR COUT
  213. GT9       LDA #0
  214.           JSR CONVERT    ;PRINT MINUTES
  215.           LDA #SPACE
  216.           JSR COUT
  217.           LDA TIME+1     ;GET HOURS AGAIN
  218.           CMP #12        ;AM?
  219.           LDA #'A'       ;ASSUME AM
  220.           BCC PRIT       ;YES IT IS AM 
  221.           LDA #'P'       ;NO - PM
  222. PRIT      JSR COUT       ;PRINT A OR P
  223.           LDA #'M'
  224.           JSR COUT
  225.           CLC            ;INDICATE NO ERRORS 
  226.           RTS
  227. *
  228. * BELL ROUTINE
  229. * MAKES THE PRODOS RECOMMENDED TONE
  230. *
  231. BELL      LDA #$20       ;DURATION OF TONE
  232.           STA WK8
  233. BELL1     LDA #$2        ;SHORT DELAY
  234.           JSR WAIT
  235.           STA SPKR       ;CLICK THE SPEAKER
  236.           LDA #$24       ;LONG DELAY
  237.           JSR WAIT
  238.           STA SPKR       ;CLICK THE SPEAKER
  239.           DEC WK8 
  240.           BNE BELL1      ;REPEAT LENGTH TIMES 
  241.           CLC            ;INDICATE NO ERRORS
  242.           RTS            ;EXIT
  243. * END
  244.